class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==nullptr||head->next==nullptr)
        return head;
        ListNode *p=head;
        ListNode *q=head->next;
        ListNode *pre=head;
        ListNode *t=nullptr;
        while(q!=nullptr)
        {
            if(p->val==q->val)
            {
                while(q!=nullptr&&p!=nullptr&&p->val==q->val)
                {
                    q=q->next;
                } 
                if(p==head)
                    head=q;
                    else
                    pre->next=q;
                while(p!=q)
                {
                    t=p;
                    p=p->next;
                    delete t;
                    t=nullptr;
                }
                    if(q!=nullptr)
                    q=q->next;
            }
            else
            {
                pre=p;
                p=q;
                q=q->next;
            }
        }
        return head;
    }
};